perm filename GRAPHX.SAI[X,ALS] blob sn#080210 filedate 1974-01-10 generic text, type T, neo UTF8
00010	BEGIN "GRAPH"
00020	DEFINE ⊂="COMMENT";
00030	DEFINE ⊃="⊂";
00040	DEFINE CR="'15",LF="'12",CRLF="CR&LF",TB="'11";
00042	 REQUIRE "PLAY.REL" LOAD_MODULE;
00043	⊂ REQUIRE "TVRLIB.REL[X,ALS]" LIBRARY;
00044	 REQUIRE "IO.REL[X,ALS]" LIBRARY;
00045	 REQUIRE "SUIO.REL[X,ALS]" LIBRARY;
00046	REQUIRE "LIB.REL[NET,NJM]" LIBRARY;
00047	EXTERNAL FORTRAN PROCEDURE FMAIN;
00050	REQUIRE "DPYSUB.HDR[1,PDQ]" SOURCE_FILE;
00060	  INTEGER I,J,K,L,M,X,Y,LX,LY,DX,DY,CHAN5,EOF,PP,POINTP,FLAG,MUTE,NUM;
00070	  STRING FILEP,FILEN,READ; BOOLEAN ER;
00080	  INTEGER ARRAY SAVE[0:5];
00090	  INTEGER ARRAY LFILE[0:127];
00100	  INTEGER ARRAY NEW[0:511];
00110	  INTEGER ARRAY DPYBUF[0:4096];
00115	INTEGER A1,A2,A3;
00120	LABEL STARTP;
00130	
00140	⊂ Allow 1140 units on a line corresponding to 76 charactters @15 units,
00150	   380 segments @ 3 and 48640 samples @ 3/128 unit, or 2.432 seconds;
00160	
00170	INTERNAL PROCEDURE CALCOMP(STRING FILE;INTEGER ARRAY BUFR);
00180	⊂ Outputs display buffer BUFR to disk file FILE in a format
00190	readable by the Nealy Calcomp plotter program PLTVEC, and by
00200	the Quam Video Synthesizer program MIRTOP;
00210	IF FILE THEN
00220	BEGIN	INTEGER DSIZ,CCCHN;
00230		OPEN(CCCHN←GETCHAN,"DSK",'14,0,1,0,0,0);
00240		ENTER(CCCHN,FILE&".GRF",0);
00250	⊂ OUTSTR("READY TO DPYPARS");
00260		DPYPARS;DSIZ←BUFR[1]+4;
00270	⊂ OUTSTR("BACK FROM DPYPARS"&CRLF);
00280		ARRYOUT(CCCHN,BUFR[0],2);WORDOUT(CCCHN,0);
00290		ARRYOUT(CCCHN,BUFR[2],DSIZ-2);
00300		RELEASE(CCCHN);
00310	END "CALCOMP";
00320	
00345	MUTE←60; NUM←3;
00350	OUTSTR("The following set-up commands of a letter followed by a number "
00360	  &"may be given:"&CRLF);
00370	OUTSTR("	M#	sets MUTE level (default value 60)"&CRLF&
00380	       "	N#	sets number of formants (default value 3)."&CRLF);
00390	OUTSTR("A number only uses preset values for M and N and specifies the file to use."
00400	      &CRLF&TB&"A CR only calls for file # 1."&CRLF&LF);
00401	OUTSTR("After a display has appeared the following single character "&
00403	   "commands may also be given:"&CRLF&TB&"P	prepare plotx file for the XGP"
00404	&CRLF&TB&"E	exit from the program"&CRLF&TB&"S	start over"&CRLF&LF);
00405	STARTP:
00407	SETFORMAT(1,0); FLAG←0; X←0;
00410	WHILE TRUE DO BEGIN "TYPE" OUTSTR("Type command  "); READ←INCHWL;
00420	IF READ[1 TO 1]="M" THEN BEGIN MUTE←CVD(READ[2 TO 4]);CONTINUE "TYPE";END;
00430	IF READ[1 TO 1]="N" THEN BEGIN NUM←CVD(READ[2 TO 2]);CONTINUE "TYPE";END;
00440	DONE; END "TYPE";
00450	IF READ="" THEN PP←1 ELSE PP←CVD(READ);
00460	FILEP←"SEG"&CVS(PP)&".SYN[SYN,ALS]";
00465	SETFORMAT(-3,0); FILEN←"HI20."&CVS(PP)&"[CMP,VIN]"; SETFORMAT(1,0);
00470	
00480	CLOSE(CHAN5); OPEN(CHAN5,"DSK",'10,2,0,0,0,EOF);
00490	LOOKUP(CHAN5,FILEP,ER);
00500	IF ER THEN OUTSTR("FILE "&FILEP&"  NOT FOUND"&CRLF);
00510	ARRYIN(CHAN5,LFILE[0],'200);
00520	
00530	DPYSET(DPYBUF); SETFORMAT(2,0); AIVECT(-560,0);
00540	⊂ Vertical numbers and vertical scale;
00550	FOR K←1 STEP 1 UNTIL 2 DO BEGIN
00560	
00570	RIVECT(-35,-7);
00580	FOR I←0 STEP 1 UNTIL 5 DO BEGIN
00590	  DPYSST(CVS(I)); RIVECT(-30,75);
00600	  END; RIVECT(35,7); RIVECT(0,-450);
00610	
00620	FOR I←0 STEP 1 UNTIL 5 DO BEGIN
00630	  RIVECT(20,0); RVECT(-20,0);
00640	  IF I=5 THEN DONE;
00650	  RVECT(0,15);
00660	  FOR J←1 STEP 1 UNTIL 4 DO BEGIN
00670	  RIVECT(10,0); RVECT(-10,0);RVECT(0,15); END;
00680	  END;
00690	
00700	 RIVECT(0,-375);   RVECT(570,0);  RVECT(570,0);
00710	AIVECT(-560,-460); END;
00720	⊃ DPYOUT(0);
00730	
00740	FLAG←0; AIVECT(-560,-30);
00750	FOR I←21 STEP 1 UNTIL 127 DO BEGIN "PONY"
00760	  IF LFILE[I]=0 THEN DONE;
00770	  L←LFILE[I] LAND '777760000000;
00780	  J←LDB(POINT(14,LFILE[I],27)); K←LDB(POINT(8,LFILE[I],35));
00790	
00800	  IF X<J%5 THEN FOR M←X STEP 1 UNTIL J%5 DO BEGIN
00810	    DPYSST(" "); X←X+1;
00820	    IF X≥76 THEN IF FLAG=0 THEN BEGIN FLAG←1;
00830	      AIVECT(-560,-490); ⊂ RIVECT(-570,-460); ⊂ RIVECT(-570,0);  END;
00840	    IF X≥152 THEN DONE "PONY";
00850	    END;
00860	  IF K<5 THEN K←5;
00870	  FOR M←1 STEP 1 UNTIL K%5 DO BEGIN
00880	    DPYSST(CVSTR(L)[1 TO 1]); IF (READ←CVSTR(L)[2 TO 2])≠"" THEN BEGIN
00890	      RIVECT(-15,-20); DPYSST(READ); RIVECT(0,20); END;
00900	     X←X+1;
00910	    IF X≥76 THEN IF FLAG=0 THEN BEGIN FLAG←1;
00920	      AIVECT(-560,-490); ⊂ RIVECT(-570,-460); ⊂ RIVECT(-570,0); END;
00930	    IF X≥152 THEN DONE "PONY";
00940	    END;
00950	  END "PONY";
00960	⊃ DPYOUT(0);
00970	
00980	FLAG←0; AIVECT(0,0);
00990	
01000	FOR I←0 STEP 1 UNTIL 5 DO SAVE[I]←0;
01010	WHILE EOF=0 DO BEGIN "DATIN"
01020	  ARRYIN(CHAN5,NEW[0],512);
01030	
01040	  FOR I←1 STEP 1 UNTIL NUM DO BEGIN "PLOT"
01050	    LY←SAVE[I]; LX←SAVE[0]; RIVECT(LX-560,LY);
01060	    FOR J←0 STEP 8 UNTIL 504 DO BEGIN
01070	      IF NEW[J]=0 THEN DONE;
01080	      X←(NEW[J] LSH -15)*3%128;
01090	      IF FLAG=2 THEN BEGIN X←X-1140; IF X>1140 THEN DONE; END;
01100	      IF (LX≥1140)∧(FLAG=0) THEN BEGIN
01110	          FLAG←1; RIVECT(-570,-460);  RIVECT(-570,0); END;
01120	
01130	      POINTP←POINT(9,NEW[J+1],-1);
01140	      FOR K←1 STEP 1 UNTIL I DO IBP(POINTP);
01150	      Y← LDB(POINTP)*3;
01160	      IF Y=0 THEN Y←LY;
01170	⊃  OUTSTR(CVS(X)&","&CVS(Y)&TB&TB);
01180	      DX←X-LX; LX←X; DY←Y-LY; LY←Y;
01190	⊂      IF X=0 THEN IF J≠0 THEN BEGIN RIVECT(DX,DY); ⊂  DONE; ⊂  END;
01200	      IF (LDB(POINT(9,NEW[J+2],17)) < MUTE)∨(DX<3)
01210	        THEN RIVECT(DX,DY) ELSE  RVECT(DX,DY);
01220	      END;
01230	    IF FLAG=1 THEN BEGIN
01240	      FLAG←0; RIVECT(570,460); RIVECT(570,0); END;
01250	    SAVE[I]←LY; RIVECT(560-LX,-LY);
01260	    END "PLOT";
01270	  IF X=0 THEN DONE "DATIN";
01280	  IF FLAG=2 THEN IF X>1140 THEN DONE "DATIN";
01290	
01300	  IF LX≥1140 THEN BEGIN FLAG←2;
01310	    RIVECT(0,-460); LX←LX-1140; END;
01320	  SAVE[0]←LX;
01330	  END "DATIN";
01340	CLOSE(CHAN5); RELEASE(CHAN5);
01350	
01360	TYPLOC(512,300); DPYOUT(0);
01370	IF ((READ←INCHRW)="P")∨(READ="p") THEN BEGIN 
01380	  OUTSTR("  EX DPYXGP[X,ALS] to plot this on the XGP."&CRLF);
01390	  CALCOMP("PLOTX",DPYBUF); READ←INCHRW; END;
01395	
01400	IF(READ="S")∨(READ="s") THEN BEGIN 
01430	  START_CODE MOVEI 0,0; '047000400017; END;
01432	  FMAIN(PP);START_CODE '047000400023; END; END;
01435	
01440	IF READ≠"E" THEN GOTO STARTP;
01450	END "GRAPH";